package com.sxt;
/**基于二叉树结构实现元素排序处理的排序器*/
public class BinaryTreeSort01<E extends Integer> {
    /*定义结点，用内部类*/
    class Node01<E extends Integer> {
        private E item01;
        private Node01 left;
        private Node01 right;

        Node01(E item) {
            this.item01 = item;
        }

        /*添加结点*/
        public void addNode(Node01 node01) {
            //完成新结点中的元素与当前新结点中的元素的判断
            //如果新结点中的 元素 小于当前结点中的元素。那么新结点放在当前结点的左子树
            if (node01.item01.intValue() < this.item01.intValue()) {
                if(this.left == null){
                    this.left = node01;
                }else {
                    this.left.addNode(node01);
                }
            }else {
                if(this.right == null){
                    this.right = node01;
                }else {
                    this.right.addNode(node01);
                }
            }
        }
        /*使用中序遍历*/
        public void inorderTraversal01(){
            if(this.left != null)this.left.inorderTraversal01();
            System.out.println(this.item01);
            if(this.right != null)this.right.inorderTraversal01();
        }
    }
    private Node01 root;//存放树的根节点的地址
    //添加元素
    public void add(E element){
        /*实例化新节点*/
        Node01<E> node01 = new Node01<>(element);
        //判断是否根结点
        if(this.root == null){
            this.root = node01;
        }else {
            //将根节点放入addNode方法中
            this.root.addNode(node01);
        }
    }
    //对元素进行排序
    public void sort(){
        //判断根结点是否为空
        if(this.root == null)return;
        //如果不是空，要遍历排序
        this.root.inorderTraversal01();
    }

    public static void main(String[] args) {
        BinaryTreeSort01<Integer> bt = new BinaryTreeSort01<>();
        bt.add(3);
        bt.add(8);
        bt.add(9);
        bt.add(7);
        bt.add(4);
        bt.add(2);
        bt.sort();
    }
}
